package main

import (
	"fmt"
)

type Person struct {
	Name string
}

//给Person结构体添加speak方法，输出 xxx是一个好人
func (p Person) speak() {
	fmt.Println(p.Name, "是一个goodman~")
}

//给Person结构体添加jisuan方法，可以计算从 1+..+1000的结果，
//说明方法体内跟函数一样，可以进行各种运算
func (p Person) jisuan() {
	res := 0
	for i := 1; i <= 1000; i++ {
		res += i
	}
	fmt.Println(p.Name, "计算的结果是", res)
}

//给Person类型绑定一份方法
func (p Person) test() {
	p.Name = "jack"
	fmt.Println("test() name=", p.Name) //输出jack
}

//给Person结构体jisuan2 方法，该方法可以接收一个参数n,计算从 1+..+n的结果
func (p Person) jisuan2(n int) {
	res := 0
	for i := 1; i <= n; i++ {
		res += i
	}
	fmt.Println(p.Name, "计算的结果是", res)
}

//给Person结构体添加getSum方法，可以计算两个数的和，并返回结果
func (p Person) getSum(n1 int, n2 int) int {
	return n1 + n2
}

type Dog struct {
}

func main() {
	var p Person
	p.Name = "tom"
	p.test()            //调用方法
	fmt.Println(p.Name) //输出 tom

	//下面的使用方式都是错误的
	//var dog Dog
	//dog.test()	//必须保证调用类型正确！

	//test()

	//调用方法
	p.speak()
	p.jisuan()
	p.jisuan2(20)
	n1 := 10
	n2 := 20

	res := p.getSum(n1, n2)
	fmt.Println("res=", res)

}
